package cn._2dland.util;

/**
 * 结束标记判断
 * 当结束标记为一个字符序列时，可使用此类进行判断
 * 
 * @author deadblue
 */
public class EndChecker {

	/** 结束标识的字节序列 */
	private byte[] byteSequence = null;

	/** 字节序列指针 */
	private int pointer = 0;

	public EndChecker(byte[] flag) {
		// 结束标识的字节序列
		byteSequence = flag;

		// 初始化指针
		pointer = 0;
	}

	/**
	 * 重置序列指针
	 */
	public void reset() {
		pointer = 0;
	}

	/**
	 * 判断当前字节是否为结束字节
	 * 
	 * @param b
	 * @return
	 */
	public boolean isEnd(byte b) {
		boolean bOK = false;

		if(b != byteSequence[pointer]) {
			// 若输入的字符与期待的字符不符，则重置指针
			reset();
		} else {
			// 若相符，则指针向后移动一位
			pointer ++;
			if(pointer >= byteSequence.length) {
				// 若以移动到最后，表示输入序列与期待序列完全一致，返回真，并充值序列指针
				bOK = true;
				reset();
			}
		}
		
		return bOK;
	}
}
